home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / Libraries / CW GUSI 1.6.4 / doc / pod / GUSI_INET.pod < prev    next >
Text File  |  1995-03-15  |  4KB  |  95 lines

  1. =head1 Internet sockets
  2.  
  3. These are the real thing for real programmers. Out-of-band
  4. data only works for sending. Both stream (TCP) and datagram (UDP) sockets are
  5. supported. Internet sockets are also suited for interapplication communication
  6. on a single machine, provided it runs MacTCP.
  7.  
  8. =head2 Differences to generic behavior
  9.  
  10.  
  11. Internet socket addresses have the following format:
  12.  
  13.     struct in_addr {
  14.       u_long s_addr;
  15.     };
  16.  
  17.     struct sockaddr_in {
  18.        u_char   sin_len;          /* Ignored */
  19.        u_char   sin_family;       /* Always C<AF_INET> */
  20.        u_short  sin_port;         /* Port number */
  21.        struct   in_addr sin_addr; /* Host ID */
  22.        char     sin_zero[8];
  23.     };
  24.  
  25. =head2 Routines specific to TCP/IP sockets
  26.  
  27. There are several routines to convert
  28. between numeric and symbolic addresses.
  29.  
  30. Hosts are represented by the following structure:
  31.  
  32.     struct hostent {
  33.       char *h_name;        /* Official name of the host              */
  34.       char **h_aliases;    /* A zero terminated array of alternate names for the host     */
  35.       int  h_addrtype;     /* Always AF_INET                       */
  36.       int  h_length;       /* The length, in bytes, of the address   */
  37.       char **h_addr_list;  /* A zero terminated array of network addresses for the host   */
  38.     };
  39.  
  40. C<struct hostent * gethostbyname(char *name)> returns an entry for the host
  41. with the given C<name> or C<NULL> if a host with this name can't be found.
  42.  
  43. C<struct hostent * gethostbyaddr(const char *addrP, int, int)> returns an
  44. entry for the host with the given address or C<NULL> if a host with this name
  45. can't be found. C<addrP> in fact has to be a C<struct in_addr *>. The last two 
  46. parameters are ignored.
  47.  
  48. C<char * inet_ntoa(struct in_addr inaddr)> converts an internet address into
  49. the usual numeric string representation (e.g., 0x8184023C is converted to
  50. "129.132.2.60")
  51.  
  52. C<struct in_addr inet_addr(char *address)> converts a numeric string into an
  53. internet address (If C<x> is a valid address, C<inet_addr(inet_ntoa(x)) == x>).
  54.  
  55. C<int gethostname(char *machname, long buflen)> gets our name into C<buffer>.
  56.  
  57. Services are represented by the following data structure:
  58.  
  59.     struct  servent {
  60.       char  *s_name;       /* official service name */
  61.       char  **s_aliases;   /* alias list  */
  62.       int   s_port;        /* port number */
  63.       char  *s_proto;      /* protocol to use ("tcp" or "udp") */
  64.     };
  65.  
  66. C<void setservent(int stayopen)> rewinds the file of services. If C<stayopen> is
  67. set, the file will remain open until C<endservent()> is called, else it will be
  68. closed after the next call to C<getservbyname()> or C<getservbyport()>.
  69.  
  70. C<void endservent()> closes the file of services.
  71.  
  72. C<struct servent * getservent()> returns the next service from the file of services, 
  73. opening the file first if necessary. If the file is not found (C</etc/services> in
  74. the preferences folder), a small built-in list is consulted. If there are no more services,
  75. C<getservent()> returns C<NULL>.
  76.  
  77. C<struct servent * getservbyname (const char * name, const char * proto)> finds a named
  78. service by calling C<getservent()> until the protocol matches C<proto> and either the name or
  79. one of the aliases matches C<name>.
  80.  
  81. C<struct servent * getservbyport (int port, const char * proto)> finds a
  82. service by calling C<getservent()> until the protocol matches C<proto> and the
  83. port matches C<port>.
  84.  
  85. Protocols are represented by the following data structure:
  86.  
  87.     struct  protoent {
  88.       char  *p_name;       /* official protocol name */
  89.       char  **p_aliases;   /* alias list (always NULL for GUSI)*/
  90.       int   p_proto;       /* protocol number */
  91.     };
  92.  
  93. C<struct protoent * getprotobyname(char * name)> finds a named protocol. This
  94. call is rather unexciting.
  95.